// Eraser.cpp: implementation of the CEraser class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Vincent.h"
#include "Eraser.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CEraser::CEraser()
{

}

CEraser::~CEraser()
{

}

void CEraser::Draw(CDC *pDC)
{
	CPen pPen(PS_SOLID, m_nPenWidth, m_rgbBackground);	// 배경색으로 펜을 새로 만든다.
	CPen* pOldPen = pDC->SelectObject(&pPen);			// 만든 펜을 선택.
	
	CPoint ptPrevious = m_listPoints.front();	// 첫번째 좌표를 이전 좌표로 설정하고, 리스트를 순회한다.
	for (list<CPoint>::iterator iter = m_listPoints.begin(); iter != m_listPoints.end(); ++iter)
	{
		pDC->MoveTo(ptPrevious);	// 이전 좌표부터
		pDC->LineTo(*iter);			// 현재 좌표까지 그린다.
		ptPrevious = *iter;			// 현재 좌표를 이전 좌표로 설정.
	}
	
	pDC->SelectObject(pOldPen);		// 펜을 복구한다.
}

void CEraser::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	m_listPoints.push_back(point + scrolled);	// 첫번째 점을 리스트에 넣는다.
}

void CEraser::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	if (m_listPoints.size() == 1)	// 점이 하나밖에 없을때 (눌렀다가 안움직이고 뗐을때)
	{
		CPoint ptFirst = m_listPoints.front();
		ptFirst -= scrolled;		// 스크롤바만큼 빼고,
		Draw(pDC);					// 이 점을 그려준 후에,
		ptFirst += scrolled;		// 다시 더한다.
	}
	
	m_bComplete = true;	// 완성.
}

void CEraser::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	CPen pPen(PS_SOLID, m_nPenWidth, m_rgbBackground);	// 배경색으로 펜을 만든다. (지우개니깐!)
	CPen* pOldPen = pDC->SelectObject(&pPen);			// 펜을 선택하고,
	
	pDC->MoveTo(CPoint(m_listPoints.back() - scrolled));// list의 마지막 좌표부터,
	pDC->LineTo(point);									// 현재 좌표까지 그린다.
	
	pDC->SelectObject(pOldPen);		// 펜을 복구하고,
	
	m_listPoints.push_back(point + scrolled);	// 좌표를 list에 추가
}
